package cn.im.qywx.queue;

import cn.im.qywx.model.ImWxUserInfo;

import java.util.HashMap;
import java.util.Map;


/**
 * @Description: 微信用户队列
 */
public class UserQueue {

	private static Map<String, ImWxUserInfo> userInfoMap = new HashMap<String, ImWxUserInfo>();// 微信用户集合<微信帐号,用户信息>

	private static Map users = new HashMap<String,String>(); //可使用IM运维用户

	/**
	 * @Description: 获取 or 初始化用户信息
	 * @param 
	 * @return  Map<String,String>
	 */
	public static Map<String, String> getUsersMap(){
		if(users.isEmpty()){
			users.put("zhangfei", "127.0.0.1");
			users.put("lixiaolong", "127.0.0.2");
		}
		return users;
	}
	
	/**
	 * 得到，修改，删除微信帐号 此方法是线程安全的方法，同一时间只能对 集合中的同一个数据源进行一次操作
	 * 
	 * @param flag
	 *            1-修改或保存现有用户对应的数据 
	 *            2-清理超时用户 
	 *            3-复制集合数据
	 * @param key
	 * @return
	 */
	public static synchronized Object userInfoMapManager(int flag, String key, ImWxUserInfo wxUserInfo) {

		switch (flag) {
		case 0:// 通过微信号得到当前对象
			return userInfoMap.get(key);

		case 1: // 修改或保存现有用户对应的数据
			userInfoMap.put(key, wxUserInfo);
			return true;

		case 2: // 清理超时用户
			if (null != userInfoMap.get(key) && null != userInfoMap.get(key).getEndvisittime() && null != wxUserInfo.getEndvisittime()) {
				if (userInfoMap.get(key).getEndvisittime() == wxUserInfo.getEndvisittime()) {// 最后说话时间是否相等
					userInfoMap.remove(key);
					return true;
				}
			}
			return false;
		case 3: // 清理指定用户
			if (userInfoMap.containsKey(key)) {
				userInfoMap.remove(key);
			}
			return true;
		case 99:// 复制集合数据
			if (null == userInfoMap || userInfoMap.size() <= 0) {
				return null;
			}

			Map<String, ImWxUserInfo> copyMap = new HashMap<String, ImWxUserInfo>();
			copyMap.putAll(userInfoMap);
			return copyMap;

		default:
			return null;
		}
	}
}
